if __FILE__ == $0

# 学習支援アプリケーションのためのDBを作成するスクリプト

require 'rubygems'
require 'mysql'
require 'activerecord'

require '0904/migration/db_info'
require '0904/migration/001_create_drills'
require '0904/migration/002_create_categories'
require '0904/migration/003_create_questions'
require '0904/migration/004_create_selections'
require '0904/migration/005_create_collections'
require '0904/migration/006_create_categorizations'
require '0904/migration/007_create_settings'

# Mysqlインスタンス
db = Mysql::new(DBInfo::HOST, DBInfo::USER, DBInfo::PASSWORD)

#TODO:以下は暫定措置(これではデータベース定義変更の度に既存のデータを全て破棄することになり、migrationの意味がない)
# 既存のデータベース破棄
db.query("DROP DATABASE IF EXISTS #{DBInfo::DB_NAME}")

# データベース作成
db.query("CREATE DATABASE IF NOT EXISTS #{DBInfo::DB_NAME}")
# ActiveRecordからの接続に切り替える
db.close
DBInfo.connect

# migrationを実行する
# TODO:実行済みのmigrationを実行するとエラーとなるが、それを考慮したコードにしなければならない
# ↑取り敢えずエラーを無視して継続させてみようか？ ←問題あり
print("Migration starts.")

# 結果出力用配列
executed = Array.new
skipped = Array.new

#001 drillテーブルの作成
begin
CreateDrills.migrate(:up)
executed.push("001")
rescue ActiveRecord::StatementInvalid => ex
print(ex, "\n")
skipped.push("001")
end

#002 categoryテーブルの作成
begin
CreateCategories.migrate(:up)
executed.push("002")
rescue ActiveRecord::StatementInvalid => ex
print(ex, "\n")
skipped.push("002")
end

#003 questionテーブルの作成
begin
CreateQuestions.migrate(:up)
executed.push("003")
rescue ActiveRecord::StatementInvalid => ex
print(ex, "\n")
skipped.push("003")
end

#004 selectionテーブルの作成
begin
CreateSelections.migrate(:up)
executed.push("004")
rescue ActiveRecord::StatementInvalid => ex
print(ex, "\n")
skipped.push("004")
end

#005 collectionsテーブル(drills-categories)の作成
begin
CreateCollections.migrate(:up)
executed.push("005")
rescue ActiveRecord::StatementInvalid => ex
print(ex, "\n")
skipped.push("005")
end

#006 categorizationsテーブル(categories-questions)の作成
begin
CreateCategorizations.migrate(:up)
executed.push("006")
rescue ActiveRecord::StatementInvalid => ex
print(ex, "\n")
skipped.push("006")
end

#007 settingsテーブル(questions-selections)の作成
begin
CreateSettings.migrate(:up)
executed.push("007")
rescue ActiveRecord::StatementInvalid => ex
print(ex, "\n")
skipped.push("007")
end


#結果出力
print("\n")
executed.each { |n|
  print("Migration #{n} is executed.", "\n")
}
print("\n")
skipped.each { |n|
  print("Migration #{n} is skipped.", "\n")
}

print("\n", "DB migrated successfully.", "\n")

end